#include <stdio.h>
#include <limits.h>

int main(int argc, char *argv[])
{
    printf("string %%s:%s\n", "I am a string");
    // 字符串m.n格式， m代表字符串长度， n代表输出的字符串个数
    printf("string %%10.5s:%10.5s\n", "abcdefghij");
    printf("\n");
    
    printf("int %%d:%d\n", 555);
    // d-十进制数字 数字mn格式， m代表填充数， n代表输出数字位数
    printf("int %%04d:%04d\n", 23);
    // +号在数字前增加正负号
    printf("int %%+04d:%+d %+d\n", 23, -23);
    // x-十六进制数字
    printf("int %%x:%x\n", 0x2a);
    // X-十六进制数字字母大写
    printf("int %%X:%X\n", 0x2a);
    // #号在输出16或8进制时添加0x前缀
    printf("int %%#x:%#x\n", 0x2a);
    printf("int %%#X:%#X\n", 0x2a);
    // o-八进制
    printf("int %%o:%o\n", 0x2a);
    printf("int %%#o:%#o\n", 0x2a);
    printf("\n");
    
    // 长整形
    printf("long %%ld:%ld\n", LONG_MAX);
    // 超长整形
    printf("long long %%lld:%lld\n", LLONG_MAX);
    printf("\n");
    
    // 无符号整形
    printf("unsigned int %%ud:%u\n", INT_MAX);
    printf("\n");
    
    // 将整数翻译成字符输出
    printf("char %%c:%c\n", 69);
    printf("\n");
    
    // 科学计数法输出浮点数
    printf("float %%e:%e\n", 1.253);
    printf("float %%.2e:%.2e\n", 1.253);
    // 科学计数法输出浮点数，字母E大写
    printf("float %%E:%E\n", 1.253);
    // 浮点数
    printf("float %%f:%f\n", 1.253);
    // 浮点数占位，控制小数点后位数后输出
    printf("float %%6.2f:%06.2f\n", 1.253333);
    // 自动判断使用e还是f, 精简方式输出浮点数
    printf("float %%g:%g\n", 1.25333333333);
    printf("\n");

    return 0;
}
